package com.internetCafes.spms.core.generic;

import java.util.List;
import java.util.Map;

/**
 * 所有自定义Dao的顶级接口, 封装常用的增删查改操作, 可以通过Mybatis Generator Maven 插件自动生成Dao,
 * 也可以手动编码,然后继承GenericDao 即可.
 * <p/>
 * T : 代表数据库中的表 映射的Java对象类型 PK :代表对象的主键类型
 * 
 * @author StarZou
 * @since 2014年6月9日 下午6:14:06
 */
public interface GenericDao<T, PK> {

	/**
	 * 通过主键, 删除对象
	 * 
	 * @param id
	 *            主键
	 */
	int deleteByPrimaryKey(PK id);

	/**
	 * 通过主键, 查询对象
	 * 
	 * @param id
	 *            主键
	 * @return
	 */
	T selectByPrimaryKey(PK id);

	/**
	 * 插入
	 */
	int insert(T entity);

	/**
	 * 批量插入
	 */
	int insertBatch(List<T> entityList);

	/**
	 * 按主键ID查询
	 */
	T selectByPrimaryKey(long id);

	/**
	 * 按主键ID选择更新
	 */
	int updateByPrimaryKeySelective(T entity);

	/**
	 * 按主键ID更新
	 */
	int updateByPrimaryKey(T entity);

	/**
	 * 批量更新
	 */
	int updateBatch(List<T> entityList);

	/**
	 * 按参数查询
	 */
	List<T> selectByParams(Map<String, Object> params);

	/**
	 * 按参数查询数量
	 */
	long countByParams(Map<String, Object> params);

	/**
	 * 按主键ID批量删除
	 */
	int deleteBatchByPrimaryKey(List<PK> ids);

}
